package com.qm.reflect;

/**
 * @Author: wb
 * @CreateTime: 2022-11-18  08:42
 * @Description: java 反射类的练习
 * java 类似的机制,通过一些方法,创造出一个一模一样的类,镜子一样,
 */
public class Myflect {
    public String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Myflect(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Myflect() {
    }

    public static void main(String[] args) {
        // .Class 结尾的叫字节码  将java 文件编译1次 变成了字节码文件
        // java 是垮平台的语言,window linux,mac,编写出来之后,编译1一次
        // c语言不可以,吃鸡,lol  c编写出来,重新编译
        // java 高级语言,计算机直接能够认识,或者是直接运行的叫低级语言
        // 计算机能够运行的 2进制代码
        // 先把.java 编译一遍.class,变成2进制让计算运行
        // 反射 将.class 反编译还原成 java 类
        // class的类,专门的操作.class的文件

//        类名.class属性, 对象名.getClass()方法, Class.forName(全类名)方法
        Class<Myflect> myflectClass1 = Myflect.class;
        Class<Myflect> myflectClass2 = (Class<Myflect>) new Myflect().getClass();
        // 给路径 class文件找到
        Class<Myflect> myflectClass3;
        try {
            myflectClass3 = (Class<Myflect>) Class.forName("com.base.chp14.Myflect");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        System.out.println(myflectClass1 == myflectClass2);
        System.out.println(myflectClass1 == myflectClass3);
        /*因为.class 文件只有1分, Class 是同一个对象 */
        /* 实体时不同的*/
        Myflect myflect1 = new Myflect();
        Myflect myflect2 = new Myflect();
        System.out.println(myflect1 == myflect2);
    }


}
